home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1996 February / EnigmA AMIGA RUN 04 (1996)(G.R. Edizioni)(IT)[!][issue 1996-02][Skylink CD III].iso / earcd / editor / proged10.lha / InstallProgED / sources / PED_Scan / ScanFunction.c < prev    next >
C/C++ Source or Header  |  1995-09-24  |  3KB  |  129 lines

  1.  
  2. /***** Include vari *****/
  3.  
  4. #include "ProgED:sources/include/Ped.h"
  5. #include <string.h>
  6.  
  7.  
  8.  
  9. /*****
  10.  *
  11.  * FUNZIONE:    ULONG SAVEDS ASM main(char *line,char *sectionname)
  12.  *
  13.  * SCOPO:    Cerca un riferimento ad una funzione C nella linea puntata
  14.  *        da "line". Il nome della funzione viene copiato in
  15.  *        "sectionname". Dipendentemente dal modo di scrivere
  16.  *        programmi questo scanner puo' fallire nel suo scopo.
  17.  *        Ho scritto questo scanner secondo il MIO modo di
  18.  *        scrivere funzioni. Se il vostro modo e' diverso dal mio
  19.  *        scrivetene uno vostro o migliorate questo.
  20.  *
  21.  * NOTA:    Utilizza SEMPRE la funzione geta4() o la direttiva __saveds!
  22.  *
  23.  * RESTITUISCE: Lunghezza della stringa copiata in "sectionname".
  24.  *        0=riferimento non trovato.
  25.  *
  26.  ****/
  27.  
  28. ULONG SAVEDS ASM main(RG(a0) char *line,RG(a1) char *sectionname)
  29. {
  30.     char    *p,
  31.         *q,
  32.         *d,
  33.         *r;
  34.     int     i,
  35.          n1,
  36.          n2;
  37.  
  38.  
  39.  
  40.  
  41.     /***** Se la linea inizia per 'static ' saltalo *****/
  42.     if ((line[0]=='s')||(line[0]=='S'))
  43.     if ((line[1]=='t')||(line[1]=='T'))
  44.     if ((line[2]=='a')||(line[2]=='A'))
  45.     if ((line[3]=='t')||(line[3]=='T'))
  46.     if ((line[4]=='i')||(line[4]=='I'))
  47.     if ((line[5]=='c')||(line[5]=='C'))
  48.     if ((line[6]==32)||(line[6]==9))
  49.     line+=7;
  50.  
  51.     /***** Se la linea inizia per 'struct ' saltalo *****/
  52.     if (line[0]=='s')
  53.     if (line[1]=='t')
  54.     if (line[2]=='r')
  55.     if (line[3]=='u')
  56.     if (line[4]=='c')
  57.     if (line[5]=='t')
  58.     if (line[6]==32)
  59.     line+=7;
  60.  
  61.     /***** Controlla che sulla linea ci siano UNA '(' ed UNA ')' *****/
  62.     p=line;
  63.     n1=n2=0;
  64.     while(*p)
  65.     {
  66.         if (*p=='(')    n1++;
  67.         if (*p==')')
  68.         {
  69.             r=p+1;
  70.             n2++;
  71.         }
  72.         p++;
  73.     }
  74.  
  75.     /****** Se c'e' una '(' ma nessuna ')' forse la definizione e' su piu' linee
  76.         in tal caso controlla che la linea finisca per ','! *****/
  77.     if ((n1==1)&&(!n2))
  78.     {
  79.         if (line[strlen(line)-1]==',')
  80.         {
  81.             r=line+strlen(line);
  82.             n2=1;
  83.         }
  84.     }
  85.  
  86.     /****** Continua solo se c'era solo una '(' ed una ')' *****/
  87.     if ((n1!=1)||(n2!=1))    return(0);
  88.  
  89.     /***** In caso positivo -> controlla che la ')' non sia seguita da altro (al massimo ';') *****/
  90.     p=r;
  91.     while(*p)
  92.     {
  93.         if ((*p!=32)&&(*p!=9)&&(*p!=';'))    break;
  94.         p++;
  95.     }
  96.  
  97.     if (*p)    return(0);
  98.  
  99.     /****** OK! Controlla che la linea sia del tipo xxxx xxxx(.... *****/
  100.     q=p=line;
  101.     n1=0;
  102.     while(*p)
  103.     {
  104.         if ((*p==32)||(*p==9))
  105.         {
  106.             q=p+1;
  107.             n1++;
  108.         }
  109.  
  110.         if (*p=='(')    break;
  111.  
  112.         p++;
  113.     }
  114.  
  115.     if (n1>1)    return(0);
  116.  
  117.     if (n1==1)    if (q==line+1)    return(0);
  118.  
  119.     /***** Se il tipo di ritorno e' un puntatore elimina l'asterisco *****/
  120.     if (*q=='*')    q++;
  121.  
  122.     /***** Copia il nome e ritorna *****/
  123.     d=sectionname;
  124.     for(i=0;i<p-q;i++)    *d++=q[i];
  125.     *d='\0';
  126.     return(p-q);
  127. }
  128.  
  129.